package com.tobby.camelinaction;

import java.io.File;

import org.apache.camel.Exchange;
import org.apache.camel.spi.Synchronization;
import org.apache.camel.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A Synchronization which is to be executed when the Exchange is done.
 * <p/>
 * This allows us to execute custom logic such as rollback by deleting the file which was
 * saved.
 *
 * @version $Revision$
 */
public class FileRollback implements Synchronization {

	private static Logger LOG = LoggerFactory.getLogger(FileRollback.class);

	@Override
	public void onComplete(Exchange exchange) {
		// this method is invoked when the exchange completed with no failures
	}

	@Override
	public void onFailure(Exchange exchange) {
		// this method is executed when the Exchange failed.
		// the cause Exception is stored on the Exchange which you can obtain using
		// getException

		// delete the file
		String name = exchange.getIn().getHeader(Exchange.FILE_NAME_PRODUCED,
				String.class);
		LOG.warn("Failure occured so deleting the backup file: " + name);

		FileUtil.deleteFile(new File(name));
	}

}
